ããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã§åæ£åã¹ãã¬ãŒãžã®åãè§£ãæŸã¡ãŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãIPFSçµ±åãå©ç¹ãå®è·µçãªå®è£ ãããã³Webéçºã«ããããã®å°æ¥ã«ã€ããŠèª¬æããŸãã
ããã³ããšã³ãIPFSçµ±åïŒçŸä»£ã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã®ããã®åæ£åã¹ãã¬ãŒãž
ãŠã§ãéçºã®ç¶æ³ãæ¥éã«é²åããäžã§ãå ç¢ã§å®å šãªã忣åã¹ãã¬ãŒãžãœãªã¥ãŒã·ã§ã³ã®å¿ èŠæ§ããŸããŸãéèŠã«ãªã£ãŠããŸããåŸæ¥ã®éäžåã·ã¹ãã ãæ€é²ãããŒã¿äŸµå®³ãããã³åäžé害ç¹ã«é¢é£ãã課é¡ã«çŽé¢ããŠãããããéçºè ã¯InterPlanetary File SystemïŒIPFSïŒã®ãããªé©æ°çãªä»£æ¿ææ®µã«ç®ãåããŠããŸãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ãããã³ããšã³ãIPFSçµ±åã®äžçãæãäžãããã®å©ç¹ãå®è·µçãªå®è£ ãããã³çŸä»£ã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã«å¯Ÿããå€é©ã®å¯èœæ§ãæ¢ããŸããããªããçµéšè±å¯ãªãŠã§ãéçºè ã§ããããšãæ ãå§ããã°ããã§ããããšããã®ã¬ã€ãã¯ããªãã®ãããžã§ã¯ãã§åæ£åã¹ãã¬ãŒãžã®åãæŽ»çšããããã«å¿ èŠãªç¥èãšããŒã«ãæäŸããŸãã
IPFSãšã¯ïŒç°¡åãªæŠèŠ
InterPlanetary File SystemïŒIPFSïŒã¯ãã€ã³ã¿ãŒãããäžã§ã®ããŒã¿ã®ä¿åããã³ã¢ã¯ã»ã¹æ¹æ³ã«é©åœãèµ·ããããšãç®çãšããããã¢ããŒãã¢ã®åæ£åãã¡ã€ã«ã·ã¹ãã ã§ããåŸæ¥ã®ã¯ã©ã€ã¢ã³ããµãŒããŒã¢ãã«ãšã¯ç°ãªããIPFSã¯ã³ã³ãã³ãã¢ãã¬ãã·ã³ã°ã·ã¹ãã ãå©çšããŸãããã®ã·ã¹ãã ã§ã¯ããã¡ã€ã«ã¯ãã®å Žæã§ã¯ãªãæå·åããã·ã¥ã«ãã£ãŠèå¥ãããŸããããã«ãããããŒã¿ã®æŽåæ§ãäžå€æ§ãããã³æ€é²èæ§ãä¿èšŒãããŸãã
IPFSã®äž»ãªæ©èœïŒ
- ã³ã³ãã³ãã¢ãã¬ãã·ã³ã°ïŒãã¡ã€ã«ã¯äžæã®ã³ã³ãã³ãããã·ã¥ïŒCIDïŒã«ãã£ãŠèå¥ãããã³ã³ãã³ãã倿Žãããªãããšãä¿èšŒãããŸãã
- 忣åïŒããŒã¿ã¯ããŒãã®ãããã¯ãŒã¯å šäœã«åæ£ãããåäžé害ç¹ãšæ€é²ãæé€ãããŸãã
- äžå€æ§ïŒãã¡ã€ã«ãIPFSã«è¿œå ããããšã倿Žã§ããªããªããããŒã¿ã®æŽåæ§ãä¿èšŒãããŸãã
- ãã¢ããŒãã¢ãããã¯ãŒã¯ïŒãŠãŒã¶ãŒã¯è€æ°ã®ãœãŒã¹ããåæã«ããŒã¿ãååŸã§ãããããé床ãšä¿¡é Œæ§ãåäžããŸãã
IPFSãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã«çµ±åããçç±
IPFSãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã«çµ±åãããšã次ã®ãããªå€æ°ã®å©ç¹ãåŸãããŸãã
匷åãããã»ãã¥ãªãã£ãšããŒã¿æŽåæ§
IPFSã®ã³ã³ãã³ãã¢ãã¬ãã·ã³ã°ã·ã¹ãã ã«ãããããŒã¿ãæ¹ãããããªãããšãä¿èšŒãããŸãããã¡ã€ã«ãIPFSã«ä¿åããããšããã®ã³ã³ãã³ãããã·ã¥ã¯æçŽãšããŠæ©èœããã³ã³ãã³ãã倿Žãããªãããšãä¿èšŒããŸããããã¯ã次ã®ãããªé«åºŠãªããŒã¿æŽåæ§ãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«éèŠã§ãã
- éèã¢ããªã±ãŒã·ã§ã³ïŒãã©ã³ã¶ã¯ã·ã§ã³ã¬ã³ãŒããšç£æ»èšŒè·¡ã®æŽåæ§ã®ç¢ºä¿ã
- å»çã¢ããªã±ãŒã·ã§ã³ïŒèš±å¯ãããŠããªã倿Žããæ©å¯æ§ã®é«ãæ£è ããŒã¿ãä¿è·ããŸãã
- ãµãã©ã€ãã§ãŒã³ç®¡çïŒè£œåã®åºæã远跡ããååã®ä¿¡é Œæ§ã確ä¿ããŸãã
æ€é²èæ§ãšããŒã¿ã®å¯çšæ§
忣åã¯IPFSã®äžæ žã§ããIPFSã¯ãããŒãã®ãããã¯ãŒã¯å šäœã«ããŒã¿ã忣ããããšã«ãããæ€é²ã®ãªã¹ã¯ãæé€ããããŒã¿ã®é«ãå¯çšæ§ãä¿èšŒããŸããäžéšã®ããŒãããªãã©ã€ã³ã«ãªã£ãŠãããããã¯ãŒã¯å ã®ä»ã®ããŒãã§ããŒã¿ãå©çšå¯èœã§ããéããããŒã¿ã«ã¯ã¢ã¯ã»ã¹ã§ããŸããããã¯ãæ€é²ã«èããå¿ èŠã®ããããŸãã¯é«ã皌åæéãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠäžå¯æ¬ ã§ãã
- ãã¥ãŒã¹ãã©ãããã©ãŒã ïŒã€ã³ã¿ãŒãããèŠå¶ãå³ããå°åã§ãæ€é²ãããŠããªãæ å ±ãžã®ã¢ã¯ã»ã¹ãæäŸããŸããå¶éãããã¡ãã£ã¢ã¢ã¯ã»ã¹ã®ããåœã®ãã¥ãŒã¹ã¢ãŠãã¬ãããIPFSã䜿çšããŠã³ã³ãã³ãããã¹ãããåžæ°ãåãã®ãªãæ å ±ã«ã¢ã¯ã»ã¹ã§ããããã«ããããšãæ³åããŠãã ããã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ïŒæ€é²ãæããããšãªãããŠãŒã¶ãŒãèªç±ã«ã³ã³ãã³ããå ±æã§ããããã«ããŸããèšè«ã®èªç±ãåªå ãããœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã¯ãIPFSã䜿çšããŠãŠãŒã¶ãŒãçæããã³ã³ãã³ãããã¹ãããæ¿æ²»çãŸãã¯ç€ŸäŒçãªèŠè§£ã«åºã¥ããŠæçš¿ãæ€é²ããããšãå°é£ã«ããå¯èœæ§ããããŸãã
- ã¢ãŒã«ã€ããããžã§ã¯ãïŒæŽå²çãªããã¥ã¡ã³ããä¿åããé·æçãªå¯çšæ§ã確ä¿ããŸããåœç«å ¬ææžé€šã¯IPFSãå©çšããŠãéèŠãªæŽå²çããã¥ã¡ã³ããä¿åããã³ä¿åããæ¿æ²»çäžå®å®ãŸãã¯èªç¶çœå®³ã«çŽé¢ããŠãã¢ã¯ã»ã¹ã§ããããã«ããããšãã§ããŸãã
ããã©ãŒãã³ã¹ãšå¹çã®åäž
IPFSã®ãã¢ããŒãã¢ã¢ãŒããã¯ãã£ã«ããããŠãŒã¶ãŒã¯è€æ°ã®ãœãŒã¹ããåæã«ããŒã¿ãååŸã§ãããããç¹ã«å€§ããªãã¡ã€ã«ã®å ŽåãããŠã³ããŒãé床ãåäžããããã©ãŒãã³ã¹ãåäžããŸããããã«ãIPFSã¯éäžåãµãŒããŒã®å¿ èŠæ§ãæé€ãã垯åå¹ ã³ã¹ããåæžããå šäœçãªå¹çãåäžãããŸãã
IPFSã䜿çšããŠã³ã³ãã³ããé ä¿¡ãããããªã¹ããªãŒãã³ã°ãã©ãããã©ãŒã ãæ€èšããŠãã ããããŠãŒã¶ãŒã¯è€æ°ã®ããŒãããåæã«ãããªãã¹ããªãŒãã³ã°ã§ããããããããã¡ãªã³ã°ãåæžãããèŠèŽäœéšãåäžããŸããããã¯ã垯åå¹ ãå¶éãããŠããããŸãã¯ã€ã³ã¿ãŒãããæ¥ç¶ãäžå®å®ãªå°åã§ç¹ã«åœ¹ç«ã¡ãŸãã
ã¹ãã¬ãŒãžã³ã¹ãã®åæž
IPFSãããã¯ãŒã¯ã®åæ£åã¹ãã¬ãŒãžå®¹éãæŽ»çšããããšã§ãéçºè ã¯åŸæ¥ã®éäžåã¹ãã¬ãŒãžãœãªã¥ãŒã·ã§ã³ãšæ¯èŒããŠãã¹ãã¬ãŒãžã³ã¹ããå€§å¹ ã«åæžã§ããŸããããã¯ã次ã®ãããªå€§éã®ããŒã¿ãä¿åããå¿ èŠãããã¢ããªã±ãŒã·ã§ã³ã«ç¹ã«åœ¹ç«ã¡ãŸãã
- ãã«ãã¡ãã£ã¢ã¢ããªã±ãŒã·ã§ã³ïŒé«è§£å床ã®ç»åããããªãããã³ãªãŒãã£ãªãã¡ã€ã«ã®ä¿åã
- ããŒã¿åæãã©ãããã©ãŒã ïŒåæãšèŠèŠåã®ããã®å€§èŠæš¡ãªããŒã¿ã»ããã®ä¿åã
- ããã¯ã¢ããããã³ã¢ãŒã«ã€ããµãŒãã¹ïŒè²»çšå¯Ÿå¹æã®é«ãããŒã¿ããã¯ã¢ããããã³ãã£ã¶ã¹ã¿ãªã«ããªãœãªã¥ãŒã·ã§ã³ã®æäŸã
ããã³ããšã³ãIPFSçµ±åïŒå®è·µçãªã¬ã€ã
IPFSãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã«çµ±åããã«ã¯ãããã€ãã®æé ãå¿ èŠã§ãã
1. IPFSããŒãã®èšå®
IPFSãããã¯ãŒã¯ãšå¯Ÿè©±ããã«ã¯ãIPFSããŒããå®è¡ããå¿ èŠããããŸãããããè¡ãã«ã¯ãããã€ãã®æ¹æ³ããããŸãã
- IPFS DesktopïŒIPFSããŒãã管çããããã®ãŠãŒã¶ãŒãã¬ã³ããªãŒãªãã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ãã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ã奜ãéçºè ã«æé©ã§ãã
- IPFSã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ïŒCLIïŒïŒé«åºŠãªãŠãŒã¶ãŒåãã®åŒ·åãªã³ãã³ãã©ã€ã³ããŒã«ãããå€ãã®å¶åŸ¡ãšæè»æ§ãæäŸããŸãã
- js-ipfsïŒãã©ãŠã¶ã§çŽæ¥å®è¡ã§ããIPFSã®JavaScriptå®è£ ãå®å šã«åæ£åãããããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ãå¯èœã«ããŸãã
ãã®ã¬ã€ãã§ã¯ããã©ãŠã¶ã§js-ipfsã䜿çšããããšã«çŠç¹ãåœãŠãŸãã
ã€ã³ã¹ããŒã«ïŒ
npmãŸãã¯yarnã䜿çšããŠjs-ipfsãã€ã³ã¹ããŒã«ã§ããŸãã
npm install ipfs
yarn add ipfs
2. ããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã§ã®IPFSããŒãã®åæå
js-ipfsãã€ã³ã¹ããŒã«ããããããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã§IPFSããŒããåæåã§ããŸãã
import { create } from 'ipfs'
async function initIPFS() {
const node = await create()
console.log('IPFS node is ready')
return node
}
let ipfsNode
initIPFS().then(node => {
ipfsNode = node;
});
ãã®ã³ãŒãã¹ããããã¯ãIPFSããŒããäœæããæºåãå®äºãããšã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžãèšé²ããŸãã
3. IPFSãžã®ãã¡ã€ã«ã®è¿œå
IPFSã«ãã¡ã€ã«ã远å ããã«ã¯ãaddã¡ãœããã䜿çšã§ããŸãã
async function addFileToIPFS(file) {
if (!ipfsNode) {
console.error("IPFS node not initialized.");
return null;
}
const result = await ipfsNode.add(file)
console.log('Added file:', result.path)
return result.cid.toString()
}
// Example usage
const fileInput = document.getElementById('file-input')
fileInput.addEventListener('change', async (event) => {
const file = event.target.files[0]
if (file) {
const cid = await addFileToIPFS(file)
console.log('File CID:', cid)
}
})
ãã®ã³ãŒãã¹ããããã¯ãå
¥åèŠçŽ ãããã¡ã€ã«ãèªã¿åããIPFSã«è¿œå ããŸããaddã¡ãœããã¯ããã¡ã€ã«ã®ã³ã³ãã³ãããã·ã¥ïŒCIDïŒãå«ããªããžã§ã¯ãã§è§£æ±ºãããPromiseãè¿ããŸãã
4. IPFSããã®ãã¡ã€ã«ã®ååŸ
IPFSãããã¡ã€ã«ãååŸããã«ã¯ãcatã¡ãœããã䜿çšã§ããŸãã
async function getFileFromIPFS(cid) {
if (!ipfsNode) {
console.error("IPFS node not initialized.");
return null;
}
const result = await ipfsNode.cat(cid)
let text = ''
for await (const chunk of result) {
text += new TextDecoder().decode(chunk)
}
return text
}
// Example usage
const cid = 'Qm...' // Replace with the actual CID
getFileFromIPFS(cid).then(content => {
console.log('File content:', content)
})
ãã®ã³ãŒãã¹ããããã¯ãCIDã䜿çšããŠIPFSãããã¡ã€ã«ãååŸãããã®ã³ã³ãã³ããã³ã³ãœãŒã«ã«èšé²ããŸãã
5. IPFS Companionã䜿çšããããŒã¿ã®ä¿å
js-ipfsã䜿çšãããšããã©ãŠã¶å
IPFSããŒãã䜿çšã§ããŸãããå€ãã®Webã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠããå®çšçãªã¢ãããŒãã¯ãå°çšã®IPFSããŒããæŽ»çšããIPFS Companionãã©ãŠã¶æ¡åŒµæ©èœãå©çšããããšã§ããIPFS Companionã¯ãIPFS URIãããŒã«ã«ã®IPFSããŒãã«èªåçã«ãªãã€ã¬ã¯ãããIPFSããã®ã³ã³ãã³ããžã®ã¢ã¯ã»ã¹ãšè¡šç€ºã®ããã»ã¹ãç°¡çŽ åããŸãã
IPFS Companionãã€ã³ã¹ããŒã«ãããŠããå ŽåãHTMLã§ipfs://ãŸãã¯dweb:/ipfs/ URIã䜿çšããŠIPFSãªãœãŒã¹ãç°¡åã«åç
§ã§ããŸãã
<img src="ipfs://Qm..." alt="Image from IPFS">
IPFS Companionã¯ãããŒã«ã«ã®IPFSããŒãããç»åãèªåçã«ãã§ãããããã©ãŠã¶ã«è¡šç€ºããŸãã
ããã³ããšã³ããã¬ãŒã ã¯ãŒã¯ã®çµ±åïŒReactãVue.jsãããã³Angular
IPFSã¯ãReactãVue.jsãããã³Angularã®ãããªäžè¬çãªããã³ããšã³ããã¬ãŒã ã¯ãŒã¯ã«ã·ãŒã ã¬ã¹ã«çµ±åã§ããŸãã
React
import React, { useState, useEffect } from 'react'
import { create } from 'ipfs'
function App() {
const [ipfsNode, setIpfsNode] = useState(null)
const [fileCid, setFileCid] = useState('')
const [fileContent, setFileContent] = useState('')
useEffect(() => {
async function initIPFS() {
const node = await create()
setIpfsNode(node)
console.log('IPFS node is ready')
}
initIPFS()
}, [])
async function addFileToIPFS(file) {
if (!ipfsNode) {
console.error("IPFS node not initialized.");
return null;
}
const result = await ipfsNode.add(file)
console.log('Added file:', result.path)
setFileCid(result.cid.toString())
}
async function getFileFromIPFS(cid) {
if (!ipfsNode) {
console.error("IPFS node not initialized.");
return null;
}
const result = await ipfsNode.cat(cid)
let text = ''
for await (const chunk of result) {
text += new TextDecoder().decode(chunk)
}
setFileContent(text)
}
const handleFileChange = async (event) => {
const file = event.target.files[0]
if (file) {
await addFileToIPFS(file)
}
}
const handleGetFile = async () => {
if (fileCid) {
await getFileFromIPFS(fileCid)
}
}
return (
<div>
<h1>React IPFS Example</h1>
<input type="file" onChange={handleFileChange} />
<button onClick={handleGetFile} disabled={!fileCid}>Get File</button>
<p>File CID: {fileCid}</p>
<p>File Content: {fileContent}</p>
</div>
)
}
export default App
Vue.js
<template>
<div>
<h1>Vue.js IPFS Example</h1>
<input type="file" @change="handleFileChange" />
<button @click="handleGetFile" :disabled="!fileCid">Get File</button>
<p>File CID: {{ fileCid }}</p>
<p>File Content: {{ fileContent }}</p>
</div>
</template>
<script>
import { create } from 'ipfs'
export default {
data() {
return {
ipfsNode: null,
fileCid: '',
fileContent: ''
}
},
mounted() {
this.initIPFS()
},
methods: {
async initIPFS() {
this.ipfsNode = await create()
console.log('IPFS node is ready')
},
async addFileToIPFS(file) {
if (!this.ipfsNode) {
console.error("IPFS node not initialized.");
return null;
}
const result = await this.ipfsNode.add(file)
console.log('Added file:', result.path)
this.fileCid = result.cid.toString()
},
async getFileFromIPFS(cid) {
if (!this.ipfsNode) {
console.error("IPFS node not initialized.");
return null;
}
const result = await this.ipfsNode.cat(cid)
let text = ''
for await (const chunk of result) {
text += new TextDecoder().decode(chunk)
}
this.fileContent = text
},
async handleFileChange(event) {
const file = event.target.files[0]
if (file) {
await this.addFileToIPFS(file)
}
},
async handleGetFile() {
if (this.fileCid) {
await this.getFileFromIPFS(this.fileCid)
}
}
}
}
</script>
Angular
import { Component, OnInit } from '@angular/core';
import { create } from 'ipfs';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
ipfsNode: any;
fileCid: string = '';
fileContent: string = '';
async ngOnInit() {
this.ipfsNode = await create();
console.log('IPFS node is ready');
}
async addFileToIPFS(file: any) {
if (!this.ipfsNode) {
console.error("IPFS node not initialized.");
return null;
}
const result = await this.ipfsNode.add(file);
console.log('Added file:', result.path);
this.fileCid = result.cid.toString();
}
async getFileFromIPFS(cid: string) {
if (!this.ipfsNode) {
console.error("IPFS node not initialized.");
return null;
}
const result = await this.ipfsNode.cat(cid);
let text = '';
for await (const chunk of result) {
text += new TextDecoder().decode(chunk);
}
this.fileContent = text;
}
handleFileChange(event: any) {
const file = event.target.files[0];
if (file) {
this.addFileToIPFS(file);
}
}
handleGetFile() {
if (this.fileCid) {
this.getFileFromIPFS(this.fileCid);
}
}
}
<div>
<h1>Angular IPFS Example</h1>
<input type="file" (change)="handleFileChange($event)" />
<button (click)="handleGetFile()" [disabled]="!fileCid">Get File</button>
<p>File CID: {{ fileCid }}</p>
<p>File Content: {{ fileContent }}</p>
</div>
ããã³ããšã³ãIPFSçµ±åã®ãŠãŒã¹ã±ãŒã¹
ããã³ããšã³ãIPFSçµ±åã¯ã驿°çã§åæ£åã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®å¹ åºãå¯èœæ§ãéããŸãã
忣åãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã
åè¿°ã®ããã«ãIPFSã䜿çšããŠãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã§ãŠãŒã¶ãŒãçæããã³ã³ãã³ãããã¹ãããæ€é²èæ§ãšããŒã¿ã®å¯çšæ§ã確ä¿ã§ããŸãããŠãŒã¶ãŒã¯ããŒã¿ãå¶åŸ¡ããæ€é²ããã©ãããã©ãŒã ã®æäœãæããããšãªãã³ã³ãã³ããèªç±ã«å ±æã§ããŸãã
忣åã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ïŒCDNïŒ
IPFSã䜿çšããŠåæ£åCDNãæ§ç¯ããéçºè ãWebãµã€ãã®ã¢ã»ããïŒç»åããããªãJavaScriptãã¡ã€ã«ïŒãããŒãã®ãããã¯ãŒã¯å šäœã«åæ£ãããããã©ãŒãã³ã¹ãåäžããã垯åå¹ ã³ã¹ããåæžã§ããŸããããã¯ãã³ã³ãã³ããã°ããŒãã«ãªãŒãã£ãšã³ã¹ã«æäŸããWebãµã€ãã§ç¹ã«åœ¹ç«ã¡ãŸãããŠãŒã¶ãŒã¯æãè¿ãå©çšå¯èœãªããŒãããããŒã¿ãååŸã§ããããã§ãã
忣åãã¡ã€ã«å ±æãšã¹ãã¬ãŒãž
IPFSã䜿çšããŠã忣åã®ãã¡ã€ã«å ±æããã³ã¹ãã¬ãŒãžã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãããŠãŒã¶ãŒãéäžåãµãŒããŒã«äŸåããã«ãã¡ã€ã«ãå®å šã«ä¿åããã³å ±æã§ããããã«ããŸãããŠãŒã¶ãŒã¯ãã¡ã€ã«ãIPFSã«ã¢ããããŒãããåã«æå·åãããã©ã€ãã·ãŒãšæ©å¯æ§ã確ä¿ã§ããŸãã
ã°ããŒãã«ã«åæ£ãããããŒã ããããžã§ã¯ãã§å ±åäœæ¥ããããšãæ³åããŠãã ãããIPFSã§æ§ç¯ããã忣åãã¡ã€ã«å ±æã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠãããã¥ã¡ã³ããã³ãŒããããã³ãã®ä»ã®ãªãœãŒã¹ãå®å šã«å ±æãã誰ããææ°ããŒãžã§ã³ã«ã¢ã¯ã»ã¹ã§ããããŒã¿ãäžæ£ã¢ã¯ã»ã¹ããä¿è·ãããããã«ããããšãã§ããŸãã
忣åããã°ãã©ãããã©ãŒã
IPFSã䜿çšããŠããã°ã³ã³ãã³ãããã¹ãããæ€é²èæ§ããããåžžã«å©çšã§ããããã«ããããšãã§ããŸããããã¬ãŒã¯ã³ã³ãã³ããIPFSã«çŽæ¥å ¬éã§ãããããæ¿åºãäŒæ¥ãã³ã³ãã³ããæ€é²ããããšãå°é£ã«ãªããŸããããã¯ãã€ã³ã¿ãŒãããã¢ã¯ã»ã¹ãå¶éãããŠããåœã®ããã¬ãŒã«ãšã£ãŠç¹ã«éèŠã§ãã
課é¡ãšèæ ®äºé
IPFSã¯å€ãã®å©ç¹ãæäŸããŸãããããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã«çµ±åããéã«ã¯ãããã€ãã®èª²é¡ãšèæ ®äºé ãèæ ®ããå¿ èŠããããŸãã
ãã³çããšããŒã¿ã®æ°žç¶æ§
IPFSäžã®ããŒã¿ã¯ãå°ãªããšã1ã€ã®ããŒããããããã³çãããŠããéããå©çšå¯èœã§ããããšãä¿èšŒãããŠããã ãã§ããé·æçãªããŒã¿ã®æ°žç¶æ§ã確ä¿ããã«ã¯ãããŒã¿ãè€æ°ã®ããŒãã«ãã³çããããããã³çããµãŒãã¹ã䜿çšããå¿ èŠããããŸãã
ãã³çããµãŒãã¹ã¯ãä¿¡é Œæ§ã®é«ãIPFSã¹ãã¬ãŒãžããã³ãã³çãã€ã³ãã©ã¹ãã©ã¯ãã£ãæäŸãããµãŒãããŒãã£ãããã€ããŒã§ããããã«ãããç¬èªã®ããŒãããªãã©ã€ã³ã«ãªã£ãŠããããŒã¿ãå©çšå¯èœã«ãªããŸããäŸãšããŠã¯ãPinataãInfuraãªã©ããããŸãã
IPNSãšå€æŽå¯èœãªã³ã³ãã³ã
IPFSã¯äžå€æ§ãæäŸããŸãããæéã®çµéãšãšãã«ã³ã³ãã³ããæŽæ°ããå¿ èŠãããå ŽåããããŸããInterPlanetary Name SystemïŒIPNSïŒã䜿çšãããšã倿Žå¯èœãªååãIPFSã³ã³ãã³ãããã·ã¥ã«é¢é£ä»ããããšãã§ããŸãããã ããIPNSã®æŽæ°ã¯é ããªãå¯èœæ§ããããå€å€§ãªãªãœãŒã¹ãå¿ èŠã§ãã
ã³ã³ãã³ãã宿çã«æŽæ°ããå¿ èŠãããããã°ãæ€èšããŠãã ãããIPNSã䜿çšããŠãããã°ã³ã³ãã³ãã®ææ°ããŒãžã§ã³ã«åºå®åãé¢é£ä»ããããšãã§ããŸãããã ããIPNSã®æŽæ°ããããã¯ãŒã¯å šäœã«äŒæãããŸã§ã«æéããããå Žåãããããšã«æ³šæããŠãã ããã
ãã©ãŠã¶ã®äºææ§
js-ipfsã䜿çšãããšããã©ãŠã¶å
IPFSããŒãã䜿çšã§ããŸããããªãœãŒã¹ã倧éã«æ¶è²»ããå¯èœæ§ãããããã¹ãŠã®ãã©ãŠã¶ãŸãã¯ããã€ã¹ã«é©ããŠãããšã¯éããŸãããIPFS Companionã䜿çšããå°çšã®IPFSããŒããæŽ»çšããæ¹ããããå®çšçãªã¢ãããŒãã§ããããšããããããŸãã
ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé
ä»ã®ãã¯ãããžãŒãšåæ§ã«ãIPFSãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã«çµ±åããéã«ã¯ãã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãèæ ®ããããšãéèŠã§ããæ©å¯ããŒã¿ãIPFSã«ã¢ããããŒãããåã«æå·åããIPFSããŒããé©åã«æ§æããã³ä¿è·ãããŠããããšã確èªããŠãã ããã
ããã³ããšã³ãIPFSçµ±åã®å°æ¥
ããã³ããšã³ãIPFSçµ±åã¯ãŸã åææ®µéã«ãããŸãããWebéçºã«é©åœãèµ·ããã忣åã¢ããªã±ãŒã·ã§ã³ã®æ°ããæä»£ãåãéãå¯èœæ§ããããŸããIPFSãšã³ã·ã¹ãã ãæçããæ°ããããŒã«ããã¯ãããžãŒãç»å Žããã«ã€ããŠãããã«é©æ°çãªãŠãŒã¹ã±ãŒã¹ãšããã³ããšã³ãã§ã®IPFSã®ããå¹ åºãæ¡çšãæåŸ ã§ããŸãã
泚ç®ãã¹ãäž»ãªãã¬ã³ãïŒ
- ããŒã«ãšéçºè ã®ãšã¯ã¹ããªãšã³ã¹ã®åäžïŒäœ¿ããããã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ãããã³ããŒã«ã«ãããéçºè ã¯IPFSãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã«ç°¡åã«çµ±åã§ããããã«ãªããŸãã
- ãããã¯ãã§ãŒã³ãã¯ãããžãŒãšã®çµ±åïŒIPFSã¯ã忣åã¢ããªã±ãŒã·ã§ã³ïŒdAppsïŒãæ§ç¯ããããã«ããããã¯ãã§ãŒã³ãã¯ãããžãŒãšçµã¿åãããŠäœ¿çšãããããšããããããŸããä»åŸãIPFSãšãããã¯ãã§ãŒã³éã®çµ±åãããã«ç·å¯ã«ãªããšäºæ³ãããŸãã
- ãã³çããµãŒãã¹ã®æ¡çšã®å¢å ïŒãã³çããµãŒãã¹ã¯ããæé ãªäŸ¡æ Œã§ä¿¡é Œæ§ãé«ããªããéçºè ã¯é·æçãªããŒã¿ã®æ°žç¶æ§ã確ä¿ãããããªããŸãã
- æ°ãããŠãŒã¹ã±ãŒã¹ã®åºçŸïŒãã¯ãããžãŒãæçããéçºè ããã®å¯èœæ§ãæ¢æ±ããã«ã€ããŠãããã³ããšã³ãIPFSçµ±åã®æ°ãã驿°çãªãŠãŒã¹ã±ãŒã¹ãæåŸ ã§ããŸãã
çµè«
ããã³ããšã³ãIPFSçµ±åã¯ãå®å šã§æ€é²èæ§ãããã髿§èœãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åŒ·åãªæ¹æ³ãæäŸããŸããIPFSã®åæ£åã¹ãã¬ãŒãžæ©èœãå©çšããããšã§ãéçºè ã¯åŸæ¥ã®éäžåã·ã¹ãã ã®å¶éã«å¯ŸåŠãã驿°çãªãœãªã¥ãŒã·ã§ã³ãäœæã§ããŸãã
èæ ®ãã¹ã課é¡ãèæ ®äºé ã¯ãããŸãããããã³ããšã³ãIPFSçµ±åã®å©ç¹ã¯åŠå®ã§ããŸãããIPFSãšã³ã·ã¹ãã ãé²åãç¶ããã«ã€ããŠããã®ãã¯ãããžãŒã®æ¡çšãããã«åºããããã忣åã§å埩åã®ããWebãžã®éãéãããããšãæåŸ ã§ããŸãã
é£ã³èŸŒãæºåã¯ã§ããŸãããïŒä»ããããã³ããšã³ããããžã§ã¯ãã§IPFSã®å®éšãéå§ãã忣åã¹ãã¬ãŒãžã®åãè§£ãæŸã¡ãŸãããïŒ